package com.open.party.cloud.model.data;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.reflect.TypeToken;
import com.open.party.cloud.model.ArticleEntity;
import com.open.party.cloud.model.UserEntity;
import com.sinothk.android.utils.XUtils;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import cn.android.x.model.AppVersionEntity;
import cn.android.x.model.data.AppPageData;

public class LocalCache {

    public static void setLoginUser(UserEntity data) {
        XUtils.cache().set("loginUser", JSON.toJSONString(data));

        // 保存其他信息
        XUtils.cache().set("loginUserId", data.getId());
        setToken(data.getToken());
        setLoginAccount(data.getAccount());
        setLoginRole(data.getAccountType().getCode());
    }

    public static void setLoginRole(String roleCode) {
//        accountType   账号类型：
//        USER：系统用户
//        USER_PARTY：用户-党员
//        PARTY_ADMIN：党组织管理员
//        VOLUNTEER_ADMIN：志愿者团队管理员
//        PARTY：党员
//        TOURIST：游客
        XUtils.cache().set("roleCode", XUtils.string().getNotNullValue(roleCode));
    }

    public static String getLoginRole() {
        try {
            return (String) XUtils.cache().get("roleCode", "");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    public static void setToken(@Nullable String token) {
        XUtils.cache().set("token", token);
    }

    public static UserEntity getLoginUser() {
        try {
            String jsonStr = (String) XUtils.cache().get("loginUser", "");
            return JSON.parseObject(jsonStr, UserEntity.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getLoginUserId() {
        try {
            return (String) XUtils.cache().get("loginUserId", "");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    public static String getToken() {
        try {
            return (String) XUtils.cache().get("token", "");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    public static void logout() {
        setToken("");
        setAutoLogin(false);
        XUtils.cache().remove("loginUser");
        XUtils.cache().set("loginUserId", "");
    }

    public static void setAutoLogin(boolean isAutoLogin) {
        XUtils.cache().set("isAutoLogin", isAutoLogin ? 1 : 0);
    }

    public static boolean getAutoLogin() {
        try {
            int autoLogin = (int) XUtils.cache().get("isAutoLogin", 0);
            return autoLogin == 1;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public static void setLoginAccount(@Nullable String account) {
        XUtils.cache().set("loginAccount", account);
    }

    public static String getLoginAccount() {
        try {
            return (String) XUtils.cache().get("loginAccount", "");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    //    public static void setTuiJianBannerData(@NotNull List<? extends SlideshowListBean> slideshowList) {
//        XUtils.cache().set("TuiJianBannerData", JSON.toJSONString(slideshowList));
//    }
//
//    public static void setXinWenNoticeData(@NotNull List<ArrayList<MarqueeListEntity>> xwrbList) {
//        XUtils.cache().set("XinWenNoticeData", JSON.toJSONString(xwrbList));
//    }
//
//    public static List<SlideshowListBean> getTuiJianBannerData() {
//        try {
//            String jsonStr = (String) XUtils.cache().get("TuiJianBannerData", "");
//            return JSON.parseArray(jsonStr, SlideshowListBean.class);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return new ArrayList<>();
//    }
//
//    public static ArrayList<ArrayList<MarqueeListEntity>> getXinWenNoticeData() {
//        try {
//            String jsonStr = (String) XUtils.cache().get("XinWenNoticeData", "");
//            ArrayList<ArrayList<MarqueeListEntity>> list = (ArrayList<ArrayList<MarqueeListEntity>>) JSON.parseArray(jsonStr, new ArrayList<ArrayList<MarqueeListEntity>>().getClass());
//            return list;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return new ArrayList<>();
//    }
//
//    // 数据字典
//    private static Map<String, String> dictionaryKeyValueMap;
//    private static HashMap<String, ArrayList<DictionaryBean>> dictionaryMap;
//
//    public static void saveDictionaryMap(HashMap<String, ArrayList<DictionaryBean>> dicMap) {
//        dictionaryMap = dicMap;
//        dictionaryKeyValueMap = new HashMap<>();
//
//        // 将数据提取放在Map
//        if (dicMap != null) {
//            new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    for (Map.Entry<String, ArrayList<DictionaryBean>> valueList : dicMap.entrySet()) {
//                        if (valueList != null && valueList.getValue().size() > 0) {
//                            for (int i = 0; i < valueList.getValue().size(); i++) {
//                                DictionaryBean item = valueList.getValue().get(i);
//                                dictionaryKeyValueMap.put(item.getCode(), item.getDesc());
//                            }
//                        }
//                    }
//                }
//            }).start();
//        }
//    }
//
//    public static ArrayList<DictionaryBean> getDictionaryData(String key) {
//        //                TZLX 通知类型
//        //                EDUCATION 学历
//        //                NATION 民族
//        //                HELP_TYPE 帮助类型
//        //                SEEK_HELP 求助服务
//        //                SUGGEST 献策吐槽
//        //                SUGGESTIONS 建言献策
//        //                WANT_TO_MAKE_COMPLAINTS 我要吐槽
//        if (dictionaryMap != null) {
//            return dictionaryMap.get(key);
//        } else {
//            return new ArrayList<>();
//        }
//    }
//
//    public static String getDictionary(String key) {
//        if (dictionaryKeyValueMap != null && !TextUtils.isEmpty(key)) {
//            return dictionaryKeyValueMap.get(key);
//        } else {
//            return "";
//        }
//    }
//    // 数据字典
//
    public static void setAppVersion(AppVersionEntity appVersion) {
        XUtils.cache().set("appVersion", JSON.toJSONString(appVersion));
    }

    public static AppVersionEntity getAppVersion() {
        try {
            String jsonStr = (String) XUtils.cache().get("appVersion", "");
            return JSON.parseObject(jsonStr, AppVersionEntity.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void setPwd(String pwd) {
        XUtils.cache().set("userFlag", pwd);
    }

    public static String getPwd() {
        try {
            return (String) XUtils.cache().get("userFlag", "");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    public static void setBannerData(@NotNull List<ArticleEntity> records) {
        XUtils.cache().set("homeBannerData", JSON.toJSONString(records));
    }

    public static List<ArticleEntity> getBannerData() {
        try {
            String jsonStr = (String) XUtils.cache().get("homeBannerData", "");
            return JSON.parseArray(jsonStr, ArticleEntity.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }

    public static void setContentData(@NotNull AppPageData<ArticleEntity> data) {
        XUtils.cache().set("ContentData", JSON.toJSONString(data));
    }

    @Nullable
    public static AppPageData<ArticleEntity> getContentData() {
        try {
            String jsonStr = (String) XUtils.cache().get("ContentData", "");
            return JSON.parseObject(jsonStr, new TypeReference<AppPageData<ArticleEntity>>(){});
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
